package test;

import common.Utils;
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;

import java.util.List;

/**
 * 写博客页面
 */
public class EditPage extends Utils {
    public static String url = "http://8.137.19.140:9090/blog_edit.html";

    public EditPage() {
        super(url);
    }

    // 不写标题
    public void EditPageFail_noTitle(){
        driver.findElement(By.cssSelector("#submit")).click();
        // 处理弹窗
        wait.until(ExpectedConditions.alertIsPresent());
        // 切换弹窗
        Alert alert = driver.switchTo().alert();
        // 点击确定 -- 停留当前页面
        alert.accept();
    }

    // 不写内容
    public void EditPageFail_noContent() throws InterruptedException {
        // 写标题
        driver.findElement(By.cssSelector("#title")).sendKeys("测试1");
        //清空内容
        WebElement ele = driver.findElement(By.cssSelector("#editor > div.CodeMirror.cm-s-default.CodeMirror-wrap > div.CodeMirror-scroll > div.CodeMirror-sizer > div > div > div > div.CodeMirror-code > div > pre"));

        Actions action = new Actions(driver);

        Thread.sleep(2000);
        action.keyDown(Keys.ALT)
                .sendKeys(ele,Keys.ARROW_RIGHT) //把鼠标放到最右边
                .keyUp(Keys.ALT)  //通过ctrl+shift+↑选中全部文本
                .keyDown(Keys.SHIFT)
                .sendKeys(Keys.ARROW_UP)
                .sendKeys(Keys.DELETE)//删除选中的本操作
                .perform();

        //还没有执行完删除就提交了 -- 必须加上强制等待
        Thread.sleep(1000);
        driver.findElement(By.cssSelector("#submit")).click();
        //处理弹窗
        wait.until(ExpectedConditions.alertIsPresent());
        //切换弹窗
        Alert alert = driver.switchTo().alert();
        //点击确定 -- 停留在当前页面
        alert.accept();
    }

    /**
     * 成功提交博客
     */
    public void EditPageSuc(){

        // 上一个测试用例中将默认内容删除，要刷新页面
        driver.navigate().refresh();

        // 写标题
        String title = "测试";
        driver.findElement(By.cssSelector("#title")).sendKeys(title);
        // 内容 -- 默认值
        driver.findElement(By.cssSelector("#submit")).click();

        // 回到列表页
        // TODO 获取所有的文章，根据最后一篇文章来校验标题是否为我们刚创建的文章
        List<WebElement> elements = driver.findElements(By.cssSelector("body > div.container > div.right > div"));
        System.out.println("size:" + elements.size());
        // 最新博客对应的选择器元素
        int size = elements.size();
        // body > div.container > div.right > div:nth-child(5) > div.title
        // 拼接有效的 CSS 选择器
        String focus = "body > div.container > div.right > div:nth-child(" + size + ") > div.title";
        String actualTitle = driver.findElement(By.cssSelector(focus)).getText();

        System.out.println("actualTitle:" + actualTitle);
        // 校验
        Assertions.assertEquals(title, actualTitle);

        driver.quit();
    }
}
